# Makefile for Zip, ZipNote, ZipCloak and ZipSplit

# add -g to CC to debug
# add -d to BIND to debug
CC   = cc
BIND = link
AS   = $(CC) -c
ASM  = objasm
SQUEEZE = squeeze -v
E    =

# flags
#   CFLAGS    flags for C compile
#   LFLAGS1   flags after output file spec, before obj file list
#   LFLAGS2   flags after obj file list (libraries, etc)
#
LIB      =
CBASE    = -throwback -wn -DASMV -apcs 3/26
CFLAGS   = $(CBASE) -IC:,@.
ASMFLAGS = -Throwback -Stamp -NoCache -CloseExec -quit -apcs 3/26
LFLAGS1  =
LFLAGS2  = $(LIB) C:o.Stubs

# Uncomment the following line to enable support for Unix
# Extra Field (Timezone)
#CFLAGS  = $(CFLAGS) -DUSE_EF_UT_TIME

# object file lists
OBJZ = zip.o zipfile.o zipup.o fileio.o util.o globals.o crc32.o crctab.o \
       crypt.o ttyio.o riscos.o acornzip.o swiven.o

OBJI = deflate.o trees.o
OBJA = match.o sendbits.o
OBJU = zipfile_.o fileio_.o util_.o globals.o riscos.o acornzip_.o swiven.o
OBJN = zipnote.o  $(OBJU)
OBJC = zipcloak.o $(OBJU) crctab.o crypt_.o ttyio.o
OBJS = zipsplit.o $(OBJU)

ZIP_H = zip.h ziperr.h tailor.h acorn/osdep.h acorn/riscos.h acorn/swiven.h

all:      zip zipnote zipsplit zipcloak


install:  %.zip %.zipnote %.zipsplit %.zipcloak %.zipsfx \
          zip zipnote zipsplit zipcloak zipsfx
        $(SQUEEZE) zip %.zip
        $(SQUEEZE) zipnote %.zipnote
        $(SQUEEZE) zipsplit %.zipsplit
        $(SQUEEZE) zipcloak %.zipcloak
        copy acorn.zipsfx %.zipsfx ~CVF

# suffix rules
.SUFFIXES:      _.o .o .c
.c_.o:
        $(CC) $(CFLAGS) -DUTIL -c $*.c -o $*_.o
.c.o:
        $(CC) $(CFLAGS) -c $<
.s.o:
        $(ASM) $(ASMFLAGS) -from @*.s -to @*.o

# rules for zip, zipnote, zipcloak and zipsplit
$(OBJZ): $(ZIP_H)
$(OBJI): $(ZIP_H)
$(OBJN): $(ZIP_H)
$(OBJS): $(ZIP_H)
$(OBJC): $(ZIP_H)
zip.o zipup.o crypt.o ttyio.o zipcloak.o crypt_.o: crypt.h
zip.o zipup.o zipnote.o zipcloak.o zipsplit.o: revision.h
zip.o crypt.o ttyio.o zipcloak.o crypt_.o: ttyio.h

crypt_.o: crypt.c
        $(CC) $(CFLAGS) -DUTIL -c c.crypt -o o.crypt_
util_.o: util.c
        $(CC) $(CFLAGS) -DUTIL -c c.util -o o.util_
fileio_.o: fileio.c
        $(CC) $(CFLAGS) -DUTIL -c c.fileio -o o.fileio_
zipfile_.o: zipfile.c
        $(CC) $(CFLAGS) -DUTIL -c c.zipfile -o o.zipfile_
acornzip_.o: acorn/acornzip.c $(ZIP_H)
        $(CC) $(CFLAGS) -DUTIL -c acorn/acornzip.c -o o.acornzip_

riscos.o: acorn/riscos.c acorn/riscos.h
        $(CC) $(CFLAGS) -c acorn/riscos.c

acornzip.o: acorn/acornzip.c $(ZIP_H)
        $(CC) $(CFLAGS) -c acorn/acornzip.c

match.o: acorn/match.s
        $(ASM) $(ASMFLAGS) -from acorn.s.match -to o.match

sendbits.o: acorn/sendbits.s
        $(ASM) $(ASMFLAGS) -from acorn.s.sendbits -to o.sendbits

swiven.o: acorn/swiven.s
        $(ASM) $(ASMFLAGS) -from acorn.s.swiven -to o.swiven

zip:      $(OBJZ) $(OBJI) $(OBJA)
          $(BIND) -o zip$(E) $(LFLAGS1) $(OBJZ) $(OBJI) $(OBJA) $(LFLAGS2)
zipnote:  $(OBJN)
          $(BIND) -o zipnote$(E) $(LFLAGS1) $(OBJN) $(LFLAGS2)
zipcloak: $(OBJC)
          $(BIND) -o zipcloak$(E) $(LFLAGS1) $(OBJC) $(LFLAGS2)
zipsplit: $(OBJS)
          $(BIND) -o zipsplit$(E) $(LFLAGS1) $(OBJS) $(LFLAGS2)

clean:  ;remove zip; remove zipcloak;
        remove zipsplit; remove zipnote;
        create o.!fake! 0
        wipe o.* ~cf

# end of Makefile
